package CapaLogica;
import CapaDatos.Cliente;
import CapaDatos.Habitacion;
import CapaDatos.Persona;
import CapaDatos.Reservacion;
import CapaDatos.listas.*;

public class Operaciones
{
    protected static ListaReservaciones reservaciones = new ListaReservaciones();
    protected static ListaClientes      clientes      = new ListaClientes();
    protected static ListaHabitaciones  habitaciones  = new ListaHabitaciones();

    public static String login (String usuario, String clave) {
        Cliente cliente = clientes.buscarLogin(usuario);

        if (cliente == null)
            return "FALSE";

        if (cliente.getClave().equals(clave))
            return
            (
                    "TRUE:"
                    + cliente.getNombre() + ":"
                    + cliente.getApellido() + ":"
                    + cliente.getCedula() + ":"
                    + cliente.getSexo() + ":"
                    + cliente.getFechaNacimiento() + ":"
                    + cliente.getEstadoCivil() + ":"
                    + cliente.getNacionalidad()
            );
        else
            return "FALSE";
    }

    public static String realizarReserva (String fechaIni, String fechaFin, String fechaActual, String idHabitacion, String cedula) {
        Habitacion habitacion = habitaciones.buscar(idHabitacion);
        if (!habitacion.getEstado().equals("Habilitada"))
            return "FALSE:La habitacion " + idHabitacion + " no se encuentra disponible";

        if (habitacion.estaReservada(fechaIni, fechaFin))
            return "FALSE:La habitacion " + idHabitacion + " ya esta reservada para esas fechas";

        Cliente cliente = clientes.buscarCedula(cedula);
        Reservacion reservacion = new Reservacion (cliente, habitacion, fechaIni, fechaFin, fechaActual);

        String resultado = reservaciones.agregar(reservacion);
        String retorno[] = resultado.split(":");

        if (retorno[0].equals("TRUE"))
            cliente.agregarReservacion(reservacion);

        return resultado;
    }

    public static String registrarUsuario (String nombre, String apellido, String cedula, char sexo, String fechaNacimiento, char estadoCivil, String usuario, String clave, String nacionalidad) {
        Cliente cliente = new Cliente
                (
                    nombre, apellido, cedula, sexo,
                    estadoCivil, fechaNacimiento,
                    usuario, clave, nacionalidad
                );

        if (clientes.agregar(cliente))
            return "TRUE";

        return "FALSE";
    }

    public static String consultarReserva (String cedulaCliente, String ID) {
        Reservacion reservacion = reservaciones.buscar(ID);
        String cedulaReservacion = reservacion.getCliente().getCedula();

        if ((reservacion == null) || (!cedulaReservacion.equals(cedulaCliente)))
            return "null:null:null:null:null";

        return
                (
                    "TRUE:" + ID +
                    reservacion.getFechaInicio() +
                    reservacion.getFechaFin() +
                    reservacion.getHabitacion().getID() +
                    String.valueOf(reservacion.getPersonas())
                );
    }

    public static String agregarHuesped (String cedulaCliente, String ID, String nombre, String apellido, String cedula, char sexo, String fechaNacimiento) {
        Reservacion reservacion = reservaciones.buscar(ID);
        String cedulaReservacion = reservacion.getCliente().getCedula();
        Persona acompanante = new Persona(nombre, apellido, cedula, sexo, fechaNacimiento);

        if ((reservacion == null) || (!cedulaReservacion.equals(cedulaCliente)))
        {
            if (reservacion.agregarAcompanante(acompanante))
                return "TRUE";

            return "FALSE:Su reservación ha alcanzado el máximo número de acompañantes";
        }

        return "FALSE:No se encontró ninguna reservacion con el ID <b>" + ID + "</b> asociada a su cuenta";
    }

    public static String obtenerMontoReserva (String cedulaCliente, String ID) {
        Reservacion reservacion = reservaciones.buscar(ID);
        String cedulaReservacion = reservacion.getCliente().getCedula();

        if ((reservacion == null) || (!cedulaReservacion.equals(cedulaCliente)))
            return "TRUE:" + String.valueOf(reservacion.getPrecioTotal());

        return "FALSE:No se encontró ninguna reservacion con el ID <b>" + ID + "</b> asociada a su cuenta";
    }

    public static int obtenerCapacidadHabitacion (String ID) {
        Habitacion habitacion = habitaciones.buscar(ID);
        return habitacion.getCapacidad();
    }

    public static boolean cancelarReservacion (String idCliente, String idReserva) {
        Cliente cliente = clientes.buscarCedula(idCliente);
        if (!cliente.cancelarReservacion(idReserva))
            return false;

        return clientes.actualizar(cliente);
    }
}
